home *** CD-ROM | disk | FTP | other *** search
- OPT MODULE
- OPT EXPORT
-
- MODULE 'dos/dos'
-
- RAISE "MEM" IF String()=NIL
-
- ->jan03: now works 100%!
-
- EXPORT DEF tabdistance -> imported from main
-
- PROC readAscii2Linelist(fh) HANDLE
- DEF fib:fileinfoblock, ascii, line=0, m=NIL, width=0, maxwidth=NIL
- DEF marray[1000]:ARRAY OF CHAR, array:PTR TO CHAR, t, linelist=NIL
- DEF len
- array := marray+999
- marray[999] := NIL
-
- ExamineFH(fh, fib)
- len := fib.size
- m := NewR(4+len)
- Read(fh, m, len)
-
- ascii := m + len - 1
-
- WHILE len
- IF ascii[] = 10
- t := String(width+6)
- StrCopy(t, array)
- linelist := Link(t, linelist)
- maxwidth := Max(maxwidth, width)
- width := 0
- array := marray+999
- line++
- ELSEIF ascii[] = 9 -> replace tab with spaces now
- FOR t := 1 TO tabdistance DO array[]-- := " "
- width := width + tabdistance
- ELSE
- width++
- array[]-- := ascii[]
- ENDIF
- ascii--
- len--
- ENDWHILE
-
- maxwidth := Max(maxwidth, width)
- t := String(width+6)
- StrCopy(t, array)
- linelist := Link(t, linelist)
- line++
-
- EXCEPT DO
- IF m THEN Dispose(m)
- ReThrow()
- ENDPROC linelist, line, maxwidth
-
- EXPORT PROC writeLinelistAscii(linelist, fh)
- DEF buf
- buf := String(16000)
- WHILE linelist
- IF (EstrLen(linelist)+1) >= (StrMax(buf)-EstrLen(buf))
- Write(fh, buf, EstrLen(buf))
- SetStr(buf, 0)
- ENDIF
- StrAdd(buf, linelist)
- StrAdd(buf, '\n')
- linelist := Next(linelist)
- ENDWHILE
- Write(fh, buf, EstrLen(buf))
- Dispose(buf)
- ENDPROC
-